#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

const int N = 200010, mod = 998244353;

int n, m;
int f[N][15];

int change(int x)
{
    if (x < 10)
        return x;
    int res = 0;
    while (x)
    {
        res += x % 10;
        x /= 10;
    }
    return change(res);
}

int main()
{
    scanf("%d", &n);
    // f[i][j] 代表前i个数，能组成数字根为j的方案数的数量。
    f[0][0] = 1;
    for (int i = 1, x; i <= n; i++)
    {
        scanf("%d", &x);
        x = change(x);
        for (int j = 0; j <= 9; j++)
            f[i][j] = f[i - 1][j];
        for (int j = 0; j <= 9; j++)
        {
            int y = change(j + x);
            f[i][y] = (f[i][y] + f[i - 1][j]) % mod;
        }
    }
    for (int i = 1; i <= 9; i++)
        printf("%d ", f[n][i]);
    return 0;
}

/*
题目描述
小A以及他们的团队遇上一些数字宝藏，每个宝藏上有一个1到9的数字，只有若干人的数字的数字根的和为x时，才可以打卡数字为x的宝藏

一个数字的数字根是指：将该数字各数位上的数字相加得到一个新的数，直到得到的数字小于10为止，例如，1491的数字根为149=>1+4+9=14=>1+4，故149的数字根为5。我们约定，小于10的数字，其数字根就为其本身。

例如， 数字1 和数字4 以及数字8组合在一起，就可以打开编号为4的数字门，这是因为1+4+8=13，而13的数字根为4。

现在，你是小A，你知道团队包括自己在内的n个人的代表数字，为了分析局势，你想要计算出可以打开1−9号门的人物组合各有多少种，你可以完成这项任务吗？


输入格式
第一行包含一个整数n，团队的人物数量。

第二行包含n个整数，第i个数字ai表示第i个人的代表数字。

输出格式
你需要输出9个数字，第i个数字表示有多少种不同的人物组合，可以打开编号为i的数字宝藏。答案可能很大，请你将答案对998244353取模后输出。

数据范围
1 ≤ n ≤ 100000,

1 ≤ ai ≤ 9。


样例1
输入数据 1
3
1 2 3
输出数据 1
1 1 2 1 1 1 0 0 0
样例1解释

组合成的1共一种 （1）

组合成的2共一种 （2）

组合成的3共一种 （3）（1,2）

组合成的4共一种 （1,3）

组合成的5共一种 （2,3）

组合成的6共一种 （1,2,3）

样例2
输入数据 2
9
1 2 3 4 5 6 7 8 9
输出数据 2
56 56 58 56 56 58 56 56 59
时空限制
1s/64MB.
*/